package com.cyber.plus.model.item;

import com.cyber.plus.model.entity.CustomItemEntity;
import com.cyber.plus.model.entity.CustomTntItemEntity;
import com.cyber.plus.registry.ModItems;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.entity.projectile.thrown.EnderPearlEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.minecraft.stat.Stats;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.minecraft.util.Hand;
import net.minecraft.util.TypedActionResult;
import net.minecraft.world.World;

import java.util.List;

/**
 * 自定义物品类
 *
 * @version 1.0
 * @author: 贺坤
 * @createTime: 2023年06月27日 21:01
 */
public class CustomItem extends Item {
	private static final FabricItemSettings fabricItemSettings;

	static {
		// 配置
		fabricItemSettings = new FabricItemSettings()
				// 最大堆叠为5
				.maxCount(5);
	}

	public CustomItem() {
		super(fabricItemSettings);
	}

	/**
	 * 右击 [使用]的时候播放声音
	 *
	 * @param world        物品使用的世界
	 * @param playerEntity 使用该物品的玩家
	 * @param hand         使用的手
	 *
	 * @return 键入的操作结果(项目堆栈)
	 */
	@Override
	public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) {
		// 获取用户手中的道具
		ItemStack itemStack = playerEntity.getStackInHand(hand);
		// 玩家实体播放声音  块状羊毛断裂
		playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, 1.0F, 1.0F);
		// 获取库存
		PlayerInventory inventory = playerEntity.getInventory();
		// 添加物品,并右手拿到新物品, 如果背包里有该物品,会清理其余物品,只保留一个
		inventory.addPickBlock(ModItems.CITRINE.getDefaultStack());
		// 添加物品到背包,没有别的动作
		inventory.insertStack(ModItems.CITRINE.getDefaultStack());


		// 世界播放声音
		world.playSound(null, playerEntity.getX(), playerEntity.getY(), playerEntity.getZ(), SoundEvents.ENTITY_ENDER_PEARL_THROW, SoundCategory.NEUTRAL, 0.5f, 0.4f / (world.getRandom().nextFloat() * 0.4f + 0.8f));
		// 设置用户道具使用 的冷却
		playerEntity.getItemCooldownManager().set(this, 20);
		// 判断是否是客户端
		if (!world.isClient) {
			// 是服务器端的时候
			// 创造一个 珍珠实体| 自定义实体
//			CustomItemEntity enderPearlEntity = new CustomItemEntity(world, playerEntity);
			//  设置展示效果 | 可不设置 会使用默认值
//			enderPearlEntity.setItem(itemStack);
			// 设置速度
			/**
			 * 设置速度并相应地更新旋转。
			 * 形参:
			 *      * @param 发射这种炮弹的实体；用来增加射手的速度
			 *      * @param 抛
			 *      * @param 偏航
			 *      * @param 滚动
			 *      * @param 速度
			 *      * @param  模糊性增加了方向；玩家使用率为1.0，其他暴民使用率值更高；有些暴徒很难调整
			 */
//			enderPearlEntity.setVelocity(playerEntity, playerEntity.getPitch(), playerEntity.getYaw(), 0.0f, 1.5f, 1.0f);
			// 世界生成实体
//			world.spawnEntity(enderPearlEntity);
			/**
			 * 定义爆炸
			 */
			CustomTntItemEntity entity = new CustomTntItemEntity(world, playerEntity);
			entity.setItem(itemStack);
			world.spawnEntity(entity);
		}
		playerEntity.incrementStat(Stats.USED.getOrCreateStat(this));
		// 判断是否是创造模式
		if (!playerEntity.getAbilities().creativeMode) {
			// 物品-1
			itemStack.decrement(1);
		}
	
		// 返回操作成功
		return TypedActionResult.success(playerEntity.getStackInHand(hand));
	}
	@Override
	public void appendTooltip(ItemStack itemStack, World world, List<Text> tooltip, TooltipContext tooltipContext) {

		// 默认为白色文本
		tooltip.add(Text.translatable("item.cyber.custom_item.tooltip"));
		// 格式化为红色文本
		tooltip.add(Text.translatable("item.cyber.custom_item.tooltip").formatted(Formatting.RED) );
	}
}
